import { baseURL, // 前缀
	sessionKey // sessionKey名称
} from '../utils/config.js';
import app from '@/main.js';
function judge(header){ // 判断请求头是否有token 如果有,是否为空
	return header ? (header.hasOwnProperty('token')? header.token=='': false) : false;
}
function unJudge(header){ // 判断请求头是否有token
	return header ? (header.hasOwnProperty('token')? header.token!='': false) : false;
}
export default function request(param) {
	if(app.checkBrowsers()){ // 判断在H5页面下是否为微信内核打开
		!param.showOnload ? uni.showLoading({'title': "加载中..."}) : ''; // 没有写加载默认加载
		let header = param.header;
		if (judge(header)) { // 请求的时候需要token但没有token
			// #ifdef MP
			let promise = new Promise(function(resolve, reject) {
				app.token(res => {
					if (res) {
						header.token = uni.getStorageSync(sessionKey); //重新赋值
						resolve(request(param));  // 成功时重新请求
					}
				})
			})
			return promise
			// #endif
		} else { //网络请求
			let reg = RegExp(/http/);
			let promise = new Promise(function(resolve, reject) {
				uni.request({
					url: (reg.test(param.url) ? '' : baseURL) + param.url, //拼接完整请求地址
					method: param.method ? param.method.toUpperCase() : "GET", //小写改为大写
					header: header || {'content-type': "application/x-www-form-urlencoded"},
					data: param.data || {},
				}).then(res => {
					let code = Number(res[1].data.code);
					!param.showOnload ? wx.hideLoading() : '';
					if(unJudge(header)&&(code==501||10000<=code>=10002)){ // 请求头需要token且 token失效/为空/过期等
					// #ifdef MP
						app.token(res => {
							if (res) {
								header.token = uni.getStorageSync(sessionKey); //重新赋值
								resolve(request(param));  // 成功时重新请求
							}
						})
					// #endif
					// #ifdef H5
						uni.showModal({
						    title: '提示',
						    content: '您当前登录状态失效,请重新登录',
						    success: function (res) {
						        if (res.confirm) {
						            uni.redirectTo({url: '/pages/my/my?type=true'});
						        }
						    }
						});
					// #endif
					}else{
						resolve(res[1].data);
					}
				}).catch(err => {
					!param.showOnload ? uni.hideLoading() : '';
					reject(err);
				})
			})
			return promise;
		}
	}
}
